package com.booksystem.campuslibrarymanagementsystem.controller.mainactivity;

import com.booksystem.campuslibrarymanagementsystem.commen.request.mainactivityrequest.Login.Tologin;
import com.booksystem.campuslibrarymanagementsystem.commen.result.Result;
import com.booksystem.campuslibrarymanagementsystem.entity.AccountTable;
import com.booksystem.campuslibrarymanagementsystem.service.AccountTableService;
import com.booksystem.campuslibrarymanagementsystem.utils.HashUtil;
import com.booksystem.campuslibrarymanagementsystem.utils.JwtUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;


@RestController
@RequestMapping("/MainActivity")
@Api(tags = "登录")
public class LoginController {
    AccountTable accountTable = new AccountTable();

    @Autowired
    private AccountTableService accountTableService;


    /**
     * 登录接口。
     *@RequestBody addaccount（account学号，password密码）
     * 1.判断学号和密码信息是否填写完整
     * 2.不完整：返回失败信息-请将信息填写完整，完整：通过输入的学号在数据库中查询是否存在
     * 3.不存在：返回失败信息-没有查询到该账户的信息，存在：判断该学号的账户在数据库中的状态是（通过，未通过）
     * 4.未通过：返回失败信息-该账户未通过审核，请等待管理员审核。通过：把输入密码加上数据库中储存的salt合并，之后通过哈希加密，之后判断和数据库中密码是否一致
     * 5.不一致：返回失败信息-密码错误。一致：将此账户学号和身份加密到token值之中并返回到前端。
     * @return Result.success();or @return Result.fail();
     */
    @PostMapping("/tologin")
    @ApiOperation(value = "登录", notes = "")
    public Result toLogin(@RequestBody Tologin tologin) {
        if (tologin.getAccount().isEmpty() || tologin.getPassword().isEmpty()) {
            return Result.fail("请将信息填写完整");
        } else {
            accountTable = accountTableService.queryByAccount(tologin.getAccount());
            if (accountTable == null) {
                return Result.fail("没有查询到该账户的信息");
            } else {
                if (accountTable.getState().equals("已通过")) {
                    String psw = tologin.getPassword() + accountTable.getSalt();
                    String generatedHash = HashUtil.HashGet(psw);
                    if (generatedHash.equals(accountTable.getPassword())) {
                        String token = JwtUtil.tokenGet(accountTable.getIdentity(), accountTable.getAccount());
                        return Result.success(token,accountTable.getIdentity() ,1);
                    } else {
                        return Result.fail("密码错误");
                    }
                } else if (accountTable.getState().equals("未通过")){
                    return Result.fail("该账户未通过审核，请等待管理员审核");
                }else if (accountTable.getState().equals("已停用")){
                    return Result.fail("该账户已停用");
                }else {
                    return Result.fail("该账户状态异常");
                }
            }
        }
    }

    @GetMapping("/test")
    @ApiOperation(value = "测试", notes = "")
    public Result toLogin() {
        return Result.fail("测试成功-显示失败");
    }
}
